package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.servrce.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/category")
@Slf4j
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    @PostMapping
    public R<String>save(@RequestBody Category category){
        log.info("【添加数据分类是：{}】",category);
        categoryService.save(category);
        return R.success("添加成功");

    }
    @GetMapping
    public R<Page>page(Integer page,Integer pagesizi){
        Page<Category> pageinfo = new Page<>(page, pagesizi);
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByDesc(Category::getSort);
        categoryService.page(pageinfo,wrapper);
        return R.success(pageinfo);
    }
     /*
      删除业务 根据id删除
     */
    @DeleteMapping
    public R<String>deleteCategory(Long id){
        log.info("根据id删除"+id);
        categoryService.removeById(id);
        return  R.success("删除分类信息成功");
    }
    /**
     * 完成 根据id修改分类信息
     */
    @PutMapping
    public R<String>update(@RequestBody Category category){
        log.info("编辑的数据：{}",category);
        categoryService.updateById(category);
        return R.success("修改分类信息成功");
    }
    /**
     *  根据条件查询 分类列表信息
     */
//    @GetMapping("/list")
//    public R<List<Category>> list(int type){
//
//    }
    /**
     *  根据条件查询 分类列表信息
     *    上面的方法条件只能是根据类型查询
     *    下面的方法 可以根据各种各样的条件查
     *       只要是 Category包含的属性 都能作为条件
     *       下面这个方法  格局更大!!!
     */
    @GetMapping("/list")
    public R<List<Category>>list(Category category){
        //条件查询多个内容
        //条件构造器
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
        Integer type = category.getType();
//        if (type==null){//如果 type!=null 条件符合 做拼接
//            wrapper.eq(Category::getType,type);
//
//        }
        wrapper.eq(type==null,Category::getType,type);
        String name = category.getName();
//        wrapper.like(name!=name&&name.length()>0,Category::getName,name);
        //骚操作 字符串判断是否为空 这个是扩展知识....
        //不成立不拼
        wrapper.like(StringUtils.isNotEmpty(name),Category::getName,name);
        wrapper.orderByAsc(Category::getSort);
        List<Category> list = categoryService.list(wrapper);
        return R.success(list);


    }

}
